package com.waitingresult.zuo.linked;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @Author: WangShuai
 * @CreateTime: 2022-11-09  10:18
 * @Description: k个节点的组内调整, 换头函数、
 * 两个链表的数值相加、
 * 两个有序链表的合并
 * A 链表 ： 1、3、5、7、9
 * B 链表 ： 2、4、6、8、10
 * New链表： 1、2、3、4、5、6、7、8、9、10
 * @Version: 1.0
 */
public class ReverseNodesInKGroup {

    public static void main(String[] args) {
        Node node = new Node();
        node.value = 1;
        node.next = new Node(1, null);
    }

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public static class Node {
        private int value;
        private Node next;
    }

    public static void reverse(Node start, Node end) {
        //先把最后一个数据，跳到下一个链表
        end = end.next;
        Node pre = null;
        Node cur = start;
        Node next = null;


        while (cur != end) {
            // 当前节点的下一个节点， 赋值给下一个节点变量
            next = cur.next;
            // 把上一个节点的变量， 赋值给当前节点的下一个节点
            cur.next = pre;
            // 把当前节点赋值给上一个节点的变量
            pre = cur;
            // 把下一个节点赋值给当前节点的变量
            cur = next;
        }
        start.next = end;
    }

    public static Node getGroupEnd(Node node, int k) {
        while (--k != 0 && node != null) {
            node = node.getNext();
        }
        return node;
    }

}
